/**
 * 应用配置文件
 * 包含API地址、企业微信配置等
 */

// 应用配置
window.AppConfig = {
    // API配置
    api: {
        // 后端API基础URL
        baseUrl: 'https://localhost:7001/api',
        // 请求超时时间（毫秒）
        timeout: 30000,
        // 重试次数
        retryCount: 3
    },
    
    // 企业微信配置
    wechat: {
        // 企业ID（从后端获取或配置）
        corpId: '',
        // 应用ID（从后端获取或配置）
        agentId: '',
        // 是否开启调试模式
        debug: false,
        // JSSDK需要使用的接口列表
        jsApiList: [
            'checkJsApi',
            'scanQRCode',
            'getLocation',
            'openLocation',
            'chooseImage',
            'previewImage',
            'uploadImage',
            'downloadImage'
        ]
    },
    
    // UI配置
    ui: {
        // 默认头像
        defaultAvatar: 'images/default-avatar.png',
        // 加载动画显示时间（毫秒）
        loadingMinTime: 500,
        // 错误消息显示时间（毫秒）
        errorMessageTime: 3000
    },
    
    // 缓存配置
    cache: {
        // 用户信息缓存时间（毫秒）
        userInfoExpire: 30 * 60 * 1000, // 30分钟
        // JSSDK配置缓存时间（毫秒）
        jsSdkConfigExpire: 60 * 60 * 1000, // 1小时
        // 客户详情缓存时间（毫秒）
        customerDetailExpire: 5 * 60 * 1000 // 5分钟
    },
    
    // 开发环境配置
    development: {
        // 是否启用调试日志
        enableDebugLog: true,
        // 是否启用模拟数据
        enableMockData: false,
        // 模拟延迟（毫秒）
        mockDelay: 1000
    }
};

// 环境检测和配置调整
(function() {
    // 检测是否在企业微信环境中
    const isInWeChatWork = /wxwork/i.test(navigator.userAgent);
    
    // 检测是否为开发环境
    const isDevelopment = location.hostname === 'localhost' || 
                         location.hostname === '127.0.0.1' || 
                         location.protocol === 'file:';
    
    // 根据环境调整配置
    if (isDevelopment) {
        // 开发环境配置
        window.AppConfig.api.baseUrl = 'https://localhost:7001/api';
        window.AppConfig.wechat.debug = true;
        window.AppConfig.development.enableDebugLog = true;
        
        // 如果不在企业微信环境中，启用模拟数据
        if (!isInWeChatWork) {
            window.AppConfig.development.enableMockData = true;
            console.warn('检测到非企业微信环境，已启用模拟数据模式');
        }
    } else {
        // 生产环境配置
        window.AppConfig.api.baseUrl = '/api'; // 使用相对路径
        window.AppConfig.wechat.debug = false;
        window.AppConfig.development.enableDebugLog = false;
        window.AppConfig.development.enableMockData = false;
    }
    
    // 存储环境信息
    window.AppConfig.environment = {
        isInWeChatWork: isInWeChatWork,
        isDevelopment: isDevelopment,
        userAgent: navigator.userAgent,
        currentUrl: location.href
    };
    
    // 调试日志
    if (window.AppConfig.development.enableDebugLog) {
        console.log('应用配置已加载:', window.AppConfig);
        console.log('环境信息:', {
            isInWeChatWork: isInWeChatWork,
            isDevelopment: isDevelopment,
            userAgent: navigator.userAgent
        });
    }
})();

// 工具函数
window.AppUtils = {
    /**
     * 调试日志
     * @param {...any} args - 日志参数
     */
    log: function(...args) {
        if (window.AppConfig.development.enableDebugLog) {
            console.log('[App]', ...args);
        }
    },
    
    /**
     * 错误日志
     * @param {...any} args - 日志参数
     */
    error: function(...args) {
        console.error('[App Error]', ...args);
    },
    
    /**
     * 警告日志
     * @param {...any} args - 日志参数
     */
    warn: function(...args) {
        console.warn('[App Warning]', ...args);
    },
    
    /**
     * 格式化日期时间
     * @param {Date|string|number} date - 日期
     * @param {string} format - 格式字符串
     * @returns {string} 格式化后的日期字符串
     */
    formatDate: function(date, format = 'YYYY-MM-DD HH:mm:ss') {
        if (!date) return '';
        
        const d = new Date(date);
        if (isNaN(d.getTime())) return '';
        
        const year = d.getFullYear();
        const month = String(d.getMonth() + 1).padStart(2, '0');
        const day = String(d.getDate()).padStart(2, '0');
        const hours = String(d.getHours()).padStart(2, '0');
        const minutes = String(d.getMinutes()).padStart(2, '0');
        const seconds = String(d.getSeconds()).padStart(2, '0');
        
        return format
            .replace('YYYY', year)
            .replace('MM', month)
            .replace('DD', day)
            .replace('HH', hours)
            .replace('mm', minutes)
            .replace('ss', seconds);
    },
    
    /**
     * 防抖函数
     * @param {Function} func - 要防抖的函数
     * @param {number} wait - 等待时间
     * @returns {Function} 防抖后的函数
     */
    debounce: function(func, wait) {
        let timeout;
        return function executedFunction(...args) {
            const later = () => {
                clearTimeout(timeout);
                func(...args);
            };
            clearTimeout(timeout);
            timeout = setTimeout(later, wait);
        };
    },
    
    /**
     * 节流函数
     * @param {Function} func - 要节流的函数
     * @param {number} limit - 限制时间
     * @returns {Function} 节流后的函数
     */
    throttle: function(func, limit) {
        let inThrottle;
        return function(...args) {
            if (!inThrottle) {
                func.apply(this, args);
                inThrottle = true;
                setTimeout(() => inThrottle = false, limit);
            }
        };
    },
    
    /**
     * 生成UUID
     * @returns {string} UUID字符串
     */
    generateUUID: function() {
        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
            const r = Math.random() * 16 | 0;
            const v = c === 'x' ? r : (r & 0x3 | 0x8);
            return v.toString(16);
        });
    },
    
    /**
     * 显示提示消息
     * @param {string} message - 消息内容
     * @param {string} type - 消息类型 (success, error, warning, info)
     * @param {number} duration - 显示时长（毫秒）
     */
    showMessage: function(message, type = 'info', duration = 3000) {
        // 简单的消息提示实现
        const messageEl = document.createElement('div');
        messageEl.className = `message message-${type}`;
        messageEl.textContent = message;
        messageEl.style.cssText = `
            position: fixed;
            top: 20px;
            left: 50%;
            transform: translateX(-50%);
            padding: 12px 24px;
            border-radius: 6px;
            color: white;
            font-size: 14px;
            z-index: 9999;
            opacity: 0;
            transition: opacity 0.3s;
        `;
        
        // 根据类型设置背景色
        const colors = {
            success: '#52c41a',
            error: '#f5222d',
            warning: '#faad14',
            info: '#1890ff'
        };
        messageEl.style.backgroundColor = colors[type] || colors.info;
        
        document.body.appendChild(messageEl);
        
        // 显示动画
        setTimeout(() => {
            messageEl.style.opacity = '1';
        }, 10);
        
        // 自动隐藏
        setTimeout(() => {
            messageEl.style.opacity = '0';
            setTimeout(() => {
                if (messageEl.parentNode) {
                    messageEl.parentNode.removeChild(messageEl);
                }
            }, 300);
        }, duration);
    }
};